#include "Linklist.h"
LNode * SearchFirst(LNode * L1, LNode * L2){
// 获取两个链表长度
    int len1 = getLength(L1);
    int len2 = getLength(L2);
    int dist; 
// 用于指向长和短链表的第一个结点
    LNode * longlist, * shortlist; // 分别指向长链和短链
    if(len1 > len2){
        longlist = L1->next;       // 长链指针指向较长链
        shortlist = L2->next;      // 短链指针指向较短链
        dist = len1 - len2;    // 求出两链长度之差
    }else{
        longlist = L2->next;       // 相反情况
        shortlist = L1->next;
        dist = len2 - len1;
    }
    while(dist--)                  // 长链后移直到与短链剩余结点相等
        longlist = longlist->next;
    while(longlist != NULL){
        if(longlist == shortlist)  // 判断两个结点是否完全相同
            return longlist;       // 相同则说明从此位置开始两链表交叉，返回当前位置
        else{                      // 否则继续判断下一个结点
            longlist = longlist->next;
            shortlist = shortlist->next;
        }
    }
// 没有公共结点
    return NULL;
}

// ...existing code...
int main(){
    LinkList L1, L2;

    ElemType arr1[] = {1, 2, 3, 4, 5};
    ElemType arr2[] = {6, 7, 8};
    L1 = CreateList2(arr1, 5);
    L2 = CreateList2(arr2, 3);

    LNode * p = L1;
    PrintList(p);
    p = L2;
    PrintList(p);

    p = SearchFirst(L1, L2); // 修改为正确的函数名
    PrintList(p);

    return 0;
}
